package push.tools.service.utils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

/**
 * 时间参数校验工具类
 */
public class TimeValidator {

    // 定义期望的时间格式
    private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN);

    /**
     * 校验时间参数
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return true: 校验通过, false: 校验失败
     */
    public static boolean validateTimeParameters(String startTime, String endTime) {
        // 校验开始时间格式
        if (hasInvalidFormat(startTime)) {
            return false;
        }

        // 校验结束时间格式
        if (hasInvalidFormat(endTime)) {
            return false;
        }

        // 校验结束时间不能大于开始时间
        return isEndTimeAfterStartTime(startTime, endTime);
    }

    /**
     * 校验单个时间字符串格式
     *
     * @param timeString 时间字符串
     * @return true: 格式正确, false: 格式错误
     */
    public static boolean hasInvalidFormat(String timeString) {
        if (timeString == null || timeString.trim().isEmpty()) {
            return true;
        }
        try {
            LocalDateTime.parse(timeString, FORMATTER);
            return false;  // 解析成功，格式有效
        } catch (DateTimeParseException e) {
            return true;   // 解析失败，格式无效
        }
    }

    /**
     * 校验结束时间是否在开始时间之后
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return true: 结束时间>=开始时间, false: 结束时间<开始时间
     */
    public static boolean isEndTimeAfterStartTime(String startTime, String endTime) {
        try {
            LocalDateTime start = LocalDateTime.parse(startTime, FORMATTER);
            LocalDateTime end = LocalDateTime.parse(endTime, FORMATTER);
            return !end.isBefore(start);
        } catch (DateTimeParseException e) {
            return false;
        }
    }

}
